package main

import (
	"fmt"
	"sync"
	"time"
)

var wg sync.WaitGroup

func writeChanData(intChan chan int) {
	// 延迟减一
	defer wg.Done()
	for i := 0; i < 10; i++ {
		intChan <- i
		fmt.Println("writeChanData ", i)
		time.Sleep(time.Second)
	}
	// 关闭管道
	close(intChan)
}

func readChanData(intChan chan int) {
	defer wg.Done()
	for val := range intChan {
		fmt.Println("readChanData ", val)
		time.Sleep(time.Second)
	}
}

// 主线程， 模拟2个协程，操作同一个管道中数据
// 一个是读管道数据 ， 一个负责写入管道数据
func main() {
	intChan := make(chan int, 10)
	wg.Add(2)
	go writeChanData(intChan)
	go readChanData(intChan)
	wg.Wait()
	fmt.Println("main end")
}
